//矩阵链乘法
#include<bits/stdc++.h>
using namespace std;
void print(int**sign,int i,int j)
{
    if(i==j)cout<<"A"<<i;
    else{
        cout<<"(";
        print(sign,i,sign[i][j]);
        print(sign,sign[i][j]+1,j);
        cout<<")";
    }
}
int main()
{
    int n;//矩阵数目
    while(cin>>n)
    {
        int**ans=new int*[n+1];//最少步数
        int**sign=new int*[n+1];//记录中间点
        for(int i=0;i<=n;i++){
            ans[i]=new int[n+1];sign[i]=new int[n+1];
            for(int j=0;j<=n;j++)
            {
                if(i==j)
                ans[i][j]=0;
                else ans[i][j]=INT_MAX;
            }
        }
        int *p=new int[n+1];//矩阵乘法，p[0]p[1]为1号矩阵的长和宽
        for(int i=0;i<=n;i++)cin>>p[i];//输入矩阵规模
        for(int num=1;num<=n-1;num++)//设置矩阵间隔，从1到n-1
        {
            int t=n-num;//矩阵计算次数
            //不能普通的ijk迭代，需先计算间隔为1再计算间隔为2等
            for(int i=1;i<=t;i++)
            {
                int j=i+num;
                for(int k=i;k<=j-1;k++)
                    {
                        int tmp=ans[i][k]+ans[k+1][j]+p[i-1]*p[j]*p[k];
                        if(ans[i][j]>tmp)
                        {
                            ans[i][j]=tmp;
                            sign[i][j]=k;
                        }
                    }
            }
        }
        // for(int i=1;i<=n-1;i++)
        //     {
        //         for(int j=i+1;j<=n;j++)
        //         {
        //             for(int k=i;k<=j-1;k++)
        //             {
        //                 int tmp=ans[i][k]+ans[k+1][j]+p[i-1]*p[j]*p[k];
        //                 if(ans[i][j]>tmp)
        //                 {
        //                     ans[i][j]=tmp;
        //                     sign[i][j]=k;
        //                 }
        //             }
        //         }
        //     }
            cout<<ans[1][n]<<" "<<sign[1][n]<<endl;
            print(sign,1,n);
    }
    
}